
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>你了解的垃圾收集器有哪些 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>你了解的垃圾收集器有哪些 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">Serial GC 的核心特点是什么？它主要适用于哪些场景？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Serial GC 采用单线程执行垃圾回收，在回收过程中会暂停所有用户线程。它主要适用于小型应用、单核处理器环境或JVM的小堆内存配置。</div>
          </div>
          <div class="card-source">来源: 1. Serial Garbage Collector</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">对比</div>
          <div class="card-question">Parallel GC 相对于 Serial GC 的主要改进是什么？它为什么也被称为“吞吐量收集器”？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">对比</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Parallel GC 是 Serial GC 的多线程版本。它通过多线程执行垃圾回收来缩短停顿时间，从而提高应用程序的整体吞吐量，因此也被称为“吞吐量收集器”（Throughput Collector）。</div>
          </div>
          <div class="card-source">来源: 2. Parallel Garbage Collector（也称为 Throughput Collector）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">CMS 垃圾收集器的设计目标是什么？它存在什么潜在的缺点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">CMS 的主要目标是减少垃圾回收的停顿时间，其标记和清除阶段可以与用户线程并发进行。它的一个潜在缺点是采用“并发标记-清除”算法可能会导致内存碎片问题。</div>
          </div>
          <div class="card-source">来源: 3. Concurrent Mark-Sweep Garbage Collector（CMS）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">G1 GC 是如何为大堆内存应用提供低延迟和高吞吐量的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">G1 GC 将堆内存划分为多个区域进行管理，并采用分代方式。它能够在多个阶段中并行回收，并根据用户设定的目标停顿时间来执行回收，从而在处理大堆内存时平衡低延迟和高吞吐量。</div>
          </div>
          <div class="card-source">来源: 4. Garbage-First Garbage Collector（G1 GC）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">对比</div>
          <div class="card-question">ZGC 和 Shenandoah GC 的共同设计目标和实现方式是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">对比</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">它们都是低延迟垃圾收集器，共同目标是最大限度地减少垃圾回收的停顿时间。它们通过并发标记、并发整理（回收）等技术，在回收期间几乎不暂停应用程序的执行来实现这一目标。</div>
          </div>
          <div class="card-source">来源: 5. Z Garbage Collector（ZGC） 和 6. Shenandoah Garbage Collector</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">Epsilon GC 是一个怎样的垃圾收集器？它的主要用途是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Epsilon GC 是一个“无操作”的垃圾收集器，它不执行任何垃圾回收。它主要用于性能基准测试、测试和调试，或适用于明确不需要垃圾回收的特定场景。</div>
          </div>
          <div class="card-source">来源: 7. Epsilon Garbage Collector</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">在选择合适的垃圾收集器时，通常需要考虑哪些应用程序的特性？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">选择垃圾收集器时，需要根据应用程序的特性来决定，主要包括内存大小、延迟要求、以及吞吐量需求等。</div>
          </div>
          <div class="card-source">来源: 文档首段</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">对比</div>
          <div class="card-question">从使用的核心算法来看，CMS 与 ZGC/Shenandoah 的一个关键区别是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">对比</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">CMS 使用的是“并发标记-清除”（Concurrent Mark-Sweep）算法，这可能导致内存碎片。而 ZGC 和 Shenandoah 都使用“并发标记-整理”（Concurrent Mark-Compact）算法，能够在并发回收的同时处理内存碎片问题。</div>
          </div>
          <div class="card-source">来源: 3. Concurrent Mark-Sweep Garbage Collector（CMS）、5. Z Garbage Collector（ZGC）、6. Shenandoah Garbage Collector</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">根据文档，在 JDK 8 环境下，默认使用的是哪种垃圾收集器？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在 JDK 8 环境下，默认使用的垃圾收集器组合是 Parallel Scavenge + Parallel Old，也就是 Parallel GC。</div>
          </div>
          <div class="card-source">来源: 文档末尾关于JDK8默认配置的说明</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
